package com.wave.blog.serve.controller;

import com.wave.blog.serve.common.Result;
import com.wave.blog.serve.entity.User;
import com.wave.blog.serve.service.UserService;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;

/**
 * 认证控制器
 * 提供用户登录和注册功能
 *
 * @author wave
 */
@RestController
@RequestMapping("/auth")
public class AuthController {

    @Resource
    private UserService userService;

    /**
     * 用户注册
     *
     * @param user 用户注册信息（包含用户名、密码、昵称）
     * @return 注册结果
     */
    @PostMapping("/register")
    public Result<User> register(@RequestBody User user) {
        // 校验用户名是否已存在
        User existingUser = userService.queryChain()
                .eq(User::getUsername, user.getUsername())
                .one();
        if (existingUser != null) {
            return Result.error("用户名已存在");
        }
        
        // 设置默认值
        user.setRole(0); // 普通用户
        user.setStatus(1); // 启用状态
        user.setAvatar(""); // 空头像
        
        // 可以在这里添加密码加密逻辑
        
        boolean saved = userService.save(user);
        if (saved) {
            // 注册成功后隐藏密码
            user.setPassword(null);
            return Result.success(user);
        }
        return Result.error("注册失败");
    }

    /**
     * 用户登录
     *
     * @param username 用户名
     * @param password 密码
     * @return 登录结果
     */
    @PostMapping("/login")
    public Result<User> login(@RequestBody User user) {
        String username = user.getUsername();
        String password = user.getPassword();
        // 这里应该根据用户名查询用户，然后验证密码
        // 简化处理，实际项目中应该使用密码加密和更严格的验证
        
        // 查找用户（这里简化处理，实际应该使用查询方法）
        User dbUser = userService.queryChain()
                .eq(User::getUsername, username)
                .one();
        
        if (dbUser == null) {
            return Result.error("用户名不存在");
        }
        
        // 密码验证（简化处理）
        if (!password.equals(dbUser.getPassword())) {
            return Result.error("密码错误");
        }
        
        // 验证用户状态
        if (dbUser.getStatus() == 0) {
            return Result.error("用户已被禁用");
        }
        
        // 登录成功，隐藏密码
        dbUser.setPassword(null);
        return Result.success(dbUser);
    }
}